#include <iostream>
#include <string>
// #include <core.h>

// 基类
class Entity {
   public:
    virtual std::string getType() const = 0;
    std::string getClassName() const;
};


class Entity1 : public Entity {
   public:
    std::string getType() const override { return "Entity1"; }

    std::string getClassName() const { 
        return typeid(*this).name();
         }
};
    
    class Entity2 : public Entity {
       public:
        std::string getType() const override { return "Entity2"; }
     std::string getClassName() const { 
        return typeid(*this).name(); 
     }
    };

    int main() {
        Entity1 entity1;
        Entity2 entity2;

        // std::cout << entity1.getType() << std::endl;
        // std::cout << entity2.getType() << std::endl;
        std::cout << entity1.getClassName() << std::endl;
        std::cout << entity2.getClassName() << std::endl;
        
        // std::string result = fmt::format("Hello, {}!", "World");

        return 0;
    }